package com.wzl.mixed.controller;

import com.wzl.common.VkPublicResponse;
import com.wzl.mixed.service.MpAsyncService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * @author weizhongli
 * @Async用法控制器
 * @since 2022-09-12 16:08
 *
 *  @Async注解由于是异步执行的，在其进行数据库的操作之时，将无法控制事务管理。
 *  解决办法：可以把@Transactional注解放到内部的需要进行事务的方法上。
 *
 *  相同类中的方法调用带@Async的方法是无法异步的，这种情况仍然是同步。
 *
 */
@Controller
@RequestMapping("/async")
@Slf4j
public class MpAsyncController {

    @Resource
    private MpAsyncService mpAsyncService;

    @RequestMapping("/task")
    @ResponseBody
    public VkPublicResponse task() throws InterruptedException {
        long t1 = System.currentTimeMillis();
        mpAsyncService.doTask1();
        mpAsyncService.doTask2();
        Thread.sleep(1000);
        long t2 = System.currentTimeMillis();
        log.info(Thread.currentThread().getName()+"主线程 用时 {} ms", t2 - t1);
        return new VkPublicResponse();
    }


}